import mysql from 'mysql2/promise';
import { PrismaClient } from '../mysql/prisma/client/index.js';
import { logger } from '../tools/index.js';

// 配置数据库连接
const pool = mysql.createPool({
    host: process.env.MYSQL_HOST, // 数据库地址
    port: process.env.MYSQL_PORT, // 数据库端口
    user: process.env.MYSQL_USER, // 数据库用户
    password: process.env.MYSQL_PWD, // 数据库密码
    database: process.env.MYSQL_DB, // 数据库名
    charset: 'utf8mb4'
});

// 查询数据
export const executeSql = async function (sqlQuery, params = []) {
    try {
        // 使用 await 等待数据库查询完成
        logger.debug(`执行 SQL %s`, sqlQuery);
        const [rows, fields] = await pool.query(sqlQuery, params);
        return rows;
    } catch (error) {
        // 返回错误信息
        logger.info(`执行 SQL 失败, sql = ${sqlQuery}`, error);
        throw new Error(`查询数据失败: ${error}`);
    }
}

// prisma 客户端
export const prisma = new PrismaClient({
    log: [
        {
            emit: 'event',
            level: 'query',
        },
    ],
});

// 绑定 query 事件的监听器来打印 SQL 查询
prisma.$on('query', (obj) => {
    logger.debug('Prisma query: %s', obj.query)
});